sql |
您所在的位置:网站首页 › 每个group by必须包含一个不是外部引用的列是什么意思 › sql |
7 个答案:
答案 0 :(得分:25) 首先,你不能这样做: having rid!=MAX(rid)HAVING子句只能包含聚合组属性的内容。 此外,1, 2, 3在SQL Server中的GROUP BY中无效 - 我认为这仅在ORDER BY中有效。 你能解释为什么这不是你想要的: select LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1), qvalues.name, qvalues.compound, MAX(qvalues.rid) from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid where LEN(datapath)>4 group by LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1), qvalues.name, qvalues.compound答案 1 :(得分:16) 好吧,正如之前所说的那样,你不能GROUP文字,我认为你很困惑,因为你可以{1,2}增加1,2,3。当你使用函数作为你的列,您需要通过相同的表达式GROUP。此外,HAVING子句是错误的,你只能使用agreggations中的内容。在这种情况下,您的查询应该是这样的: ORDER答案 2 :(得分:11) 您不能按文字分组,只能按列分组。 你可能正在寻找这样的东西: select LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1) as pathinfo, qvalues.name, qvalues.compound, qvalues.rid from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid where LEN(datapath)>4 group by pathinfo, qvalues.name, qvalues.compound having rid!=MAX(rid)首先,您必须为第一个表达式赋予as列名称。然后,您必须按表达式指定组中列的名称。 答案 3 :(得分:0) 当您使用GROUP BY时,您还需要对不在group by子句中的列使用聚合函数。 我不确切地知道你要做什么,但我想这会奏效: select LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1), qvalues.name, qvalues.compound, MAX(qvalues.rid) from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid where LEN(datapath)>4 group by LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1), qvalues.name, qvalues.compound having rid!=MAX(rid)修改强> 我在这里要做的是group by,所有字段都是rid。如果这不是您想要的,那么为了获得有效的SQL语句,您需要做的是按字段为每个被删除的组添加聚合函数调用... 答案 4 :(得分:0) 我认为您没有正确使用GROUP BY。 GROUP BY的要点是在执行数学/聚合函数之前,将表组织成基于某一列或多列的部分。 例如,在此表中: Name Age Salary Bob 25 20000 Sally 42 40000 John 42 90000SELECT语句可以是GROUP BY名称(Bob,Sally和John各自是独立的组),Age(Bob将是一个组,Sally和John将是另一个组),或Salary(与名称几乎相同的结果) 按“1”分组没有任何意义,因为“1”不是列名。 答案 5 :(得分:0) 这是一个简单的查询,用于查找药品类型为A且超过2的公司名称。 SELECT CNAME FROM COMPANY WHERE CNO IN ( SELECT CNO FROM MEDICINE WHERE type='A' GROUP BY CNO HAVING COUNT(type) > 2 )答案 6 :(得分:0) 我刚发现这个错误。,在select查询中的group by子句中使用GETDATE()[即外部引用]。 当用相应的表中的日期列替换它时,它被清除。 想分享一个简单的例子。干杯;) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |